package cn.itcast.protocol;

import cn.itcast.message.LoginRequestMessage;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.logging.LoggingHandler;

public class TestMessageCodec {
    public static void main(String[] args) throws Exception {

        // 工人1  1234
//                        - 把工人1的一部分数据和工人2的一部分数据拼接成完整的数据（多次记录了消息之间的状态，线程不安全，不能在多线程下共享）
        // 工人2  1234
        LengthFieldBasedFrameDecoder FRAME_DECODER = new LengthFieldBasedFrameDecoder(1024, 12, 4, 0, 0);// 解决黏包/半包问题

        // 不会保存上一次的状态信息（线程安全）
        LoggingHandler LOGGING_HANDLER = new LoggingHandler();

        EmbeddedChannel channel = new EmbeddedChannel(
                LOGGING_HANDLER,
                FRAME_DECODER,
                new MessageCodec());

        // 编码 encode
        LoginRequestMessage message = new LoginRequestMessage("zhangsan", "123");
        channel.writeOutbound(message);

        // 解码 decode
        ByteBuf buf = ByteBufAllocator.DEFAULT.buffer();
        new MessageCodec().encode(null, message, buf);
        // 入站
        channel.writeInbound(buf);
    }
}
